package com.wicket.okrapp.integration.dto;

import com.wicket.okrapp.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.Objects;
import lombok.Data;

/**
 * @desc CycleTypeInstanceRelationshipDto
 * @使用场景
 */
@Data
public class CycleTypeInstanceRelationshipDto
  extends BaseDto
  implements Serializable {

  /**
   * 周期类型ID:
   */
  @ApiModelProperty("周期类型ID")
  private String cycleTypeId;

  /**
   * 工作周期类型关系ID:
   */
  @ApiModelProperty("工作周期类型关系ID")
  private String cycleRelationshipId;

  /**
   * 周期类型标准化:
   */
  @ApiModelProperty("周期类型标准化")
  private String cycleTypeStandard;

  /**
   * 1111111工作周期关系类型:
   */
  @ApiModelProperty("1111111工作周期关系类型")
  private String cycleRelationType;

  /**
   * 关联父工作周期类型编码:
   */
  @ApiModelProperty("关联父工作周期类型编码")
  private String relationCycleTypeCode;

  /**
   * 子工作周期数量:
   */
  @ApiModelProperty("子工作周期数量")
  private Long subCycleNumber;

  /**
   * 是否中期:
   */
  @ApiModelProperty("是否中期")
  private String isInterim;

  /**
   * 主体生命周期:
   */
  @ApiModelProperty("主体生命周期")
  private String subjectLifeCycle;

  /**
   * 是否存档:
   */
  @ApiModelProperty("是否存档")
  private String isArchive;

  /**
   * 周期类型名称
   */
  @ApiModelProperty("周期类型名称")
  private String cycleTypeName;

  /**
   * 子周期类型ID
   */
  @ApiModelProperty("子周期类型ID")
  private String subCycleTypeId;

  /**
   * 子周期类型标识
   */
  @ApiModelProperty("子周期类型标识")
  private String subCycleTypeCode;

  /**
   * 子周期类型标准化 STANDARD:普通标准 CUSTOM_STANDARD:自定义标准 IRREGULAR:不规则
   */
  @ApiModelProperty("子周期类型标准化")
  private String subCycleTypeStandard;

  /**
   * 子周期类型名称
   */
  @ApiModelProperty("子周期类型名称")
  private String subCycleTypeName;

  /**
   * 关联父周期类型ID
   */
  @ApiModelProperty("关联父周期类型ID")
  private String parentCycleTypeId;

  /**
   * 父周期类型标准化 STANDARD:普通标准 CUSTOM_STANDARD:自定义标准 IRREGULAR:不规则
   */
  @ApiModelProperty("父周期类型标准化")
  private String parentCycleTypeStandard;

  /**
   * 关联父周期类型名称
   */
  @ApiModelProperty("关联父周期类型名称")
  private String parentCycleTypeName;

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    if (!super.equals(o)) return false;
    CycleTypeInstanceRelationshipDto that = (CycleTypeInstanceRelationshipDto) o;
    return (
      cycleTypeId == that.cycleTypeId &&
      cycleRelationshipId == that.cycleRelationshipId &&
      cycleTypeStandard == that.cycleTypeStandard &&
      cycleRelationType == that.cycleRelationType &&
      relationCycleTypeCode == that.relationCycleTypeCode &&
      subCycleNumber == that.subCycleNumber &&
      isInterim == that.isInterim &&
      subjectLifeCycle == that.subjectLifeCycle &&
      isArchive == that.isArchive &&
      cycleTypeName == that.cycleTypeName &&
      subCycleTypeId == that.subCycleTypeId &&
      subCycleTypeCode == that.subCycleTypeCode &&
      subCycleTypeStandard == that.subCycleTypeStandard &&
      subCycleTypeName == that.subCycleTypeName &&
      parentCycleTypeId == that.parentCycleTypeId &&
      parentCycleTypeStandard == that.parentCycleTypeStandard &&
      parentCycleTypeName == that.parentCycleTypeName
    );
  }

  @Override
  public int hashCode() {
    return Objects.hash(
      super.hashCode(),
      cycleTypeId,
      cycleRelationshipId,
      cycleTypeStandard,
      cycleRelationType,
      relationCycleTypeCode,
      subCycleNumber,
      isInterim,
      subjectLifeCycle,
      isArchive,
      cycleTypeName,
      subCycleTypeId,
      subCycleTypeCode,
      subCycleTypeStandard,
      subCycleTypeName,
      parentCycleTypeId,
      parentCycleTypeStandard,
      parentCycleTypeName
    );
  }

}
